#include "Curseur.h"

/*Precondition : cu non initialisee*/
void InitCurseur(Curseur  * cu)
{
  cu->x=0;
  cu->y=0;
}

/*Precondition : cu initialisee*/
void ModifCoordonneesCurseur(Curseur * cu,Coordonnees c)
{
  cu->x=c.x;
  cu->y=c.y;
}

/*Precondition : cu initialisee                                                                                                                                                                               Postcondition : cu ne peut plus etre utilise*/
void EffacerCurseur(Curseur * cu)
{
  cu->x=0;
  cu->y=0;
  cu=NULL;
}

/*Precondition : cu et e initialisee                                                                                                                                                                          Postcondition : d est place dans une case du tableau Ecran*/
void PlacerDessinsEcran(const Curseur cu,Ecran * e,Dessins * d)
{
  g_array_insert_val(e->tab2D_de_dessins,(int)(cu.y*(e->dimX)+cu.x),d);
}

/*Precondition : cu et e initialisee                                                                                                                                                                          Postcondition : on recupere l'adresse de dessins pour pouvoir la deplacer dans une                                                                                                                          autre case de l'ecran.*/
Dessins * RecupAdressDessins(const Curseur cu,const Ecran e)
{
  return g_array_index(e.tab2D_de_dessins,Dessins*,(int)(cu.y*(e.dimX)+cu.x));
}

/*Precondition : cu et e initialisee                                                                                                                                                                          Postcondition : d est place a la nouvelle case du tableau Ecran.                                                                                                                                            Si la case est deja prise, alors l'ancienne adresse est ecrasee au                                                                                                                                          profit de la nouvelle (voir si on peut trouver d'autre solutions)*/
void DeplacerAdresseDessins(const Curseur cu,Ecran * e,Dessins * d)
{
  PlacerDessinsEcran(cu,e,d);
}
  

/*Precondition : cu et e initialisee                                                                                                                                                                          Postcondition : La case qui contient l'adresse que pointe le curseur                                                                                                                                        est liberee*/
void EffacerAdressDessins(const Curseur cu,Ecran * e)
{
  PlacerDessinsEcran(cu,e,NULL);
}
